package com.empresa.rhtutorial.entity.funcionario;


import java.text.SimpleDateFormat;
import java.util.Date;

import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Access;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.AccessType;
import javax.persistence.Transient;

import com.powerlogic.jcompany.commons.config.stereotypes.SPlcEntity;
import javax.persistence.Entity;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * Classe Concreta gerada a partir do assistente
 */
@SPlcEntity
@Entity
@Table(name="FUNCIONARIO")
@SequenceGenerator(name="SE_FUNCIONARIO", sequenceName="SE_FUNCIONARIO")
@Access(AccessType.FIELD)
@NamedQueries({

	@NamedQuery(  name="FuncionarioEntity.querySelRel", 
				 query="select id as id, " +
						      "usuarioUltAlteracao as usuarioUltAlteracao, " +
							  "dataUltAlteracao as dataUltAlteracao " +
					   "from FuncionarioEntity " +
					   "order by usuarioUltAlteracao asc"),

	@NamedQuery(  name="FuncionarioEntity.queryMan", 
				 query="from FuncionarioEntity " +
					   "where sitHistoricoPlc='A'"),

	@NamedQuery( name="FuncionarioEntity.querySel", 
				query="select obj.id as id, " +
							 "obj.cpf as cpf, " +
							 "obj.nome as nome, " +
							 "obj.dataNascimento as dataNascimento, " +
							 "obj.estadoCivil as estadoCivil, " +
							 "obj1.id as unidadeOrganizacional_id, " +
							 "obj1.nome as unidadeOrganizacional_nome, " +
							 "obj.enderecoResidencial.logradouro as enderecoResidencial_logradouro, " +
							 "obj2.id as enderecoResidencial_uf_id, " +
							 "obj2.nome as enderecoResidencial_uf_nome " +
					  "from FuncionarioEntity obj " +
					  "left outer join obj.unidadeOrganizacional as obj1 " +
					  "left outer join obj.enderecoResidencial.uf as obj2 " +
					  "where obj.sitHistoricoPlc='A' order by obj.nome asc"),

	@NamedQuery( name="FuncionarioEntity.querySelLookup", 
			    query="select id as id, " +
			    	         "nome as nome " +
					  "from FuncionarioEntity " +
					  "where id = ? " +
					  "order by id asc"),

	@NamedQuery( name="FuncionarioEntity.naoDeveExistirCpfDuplicado", 
				query="select count(*) " +
					  "from FuncionarioEntity where cpf = :cpf")
})
public class FuncionarioEntity extends Funcionario {

	private static final Log logger = LogFactory.getLog(FuncionarioEntity.class);
	
	private static final long serialVersionUID = 1L;
 	
	@Transient	
	private int idadeMin;
	
	@Transient
	private int idadeMax;

	@Transient	
	private Date dataNascimentoMin;
	
	@Transient
	private Date dataNascimentoMax;
	
    /*
     * Construtor padrao
     */
    public FuncionarioEntity() {
    }
    
	@Override
	public String toString() {
		return getNome();
	}

	public int getIdadeMin() {
		return idadeMin;
	}

	public void setIdadeMin(int idadeMin) {
		this.idadeMin = idadeMin;
		if (idadeMin>0) {
			this.setDataNascimentoMax(dateUtil.dateAccodingToYears(new Date(), idadeMin, true));
			SimpleDateFormat df = new SimpleDateFormat();
			logger.debug("-----> idadeMin: " + idadeMin);
			logger.debug("-----> dataNascimentoMax: " + df.format(dataNascimentoMax));		
		}
	}

	public int getIdadeMax() {
		return idadeMax;
	}

	public void setIdadeMax(int idadeMax) {
		this.idadeMax = idadeMax;
		if (idadeMax>0) {
			this.setDataNascimentoMin(dateUtil.dateAccodingToYears(new Date(), idadeMax, true));
			SimpleDateFormat df = new SimpleDateFormat();
			logger.debug("-----> idadeMax: " + idadeMax);
			logger.debug("-----> dataNascimentoMin: " + df.format(dataNascimentoMin));		
		}
	}
	public Date getDataNascimentoMin() {
		return dataNascimentoMin;
	}
	public void setDataNascimentoMin(Date dataNascimentoMin) {
		this.dataNascimentoMin = dataNascimentoMin;
	}
	public Date getDataNascimentoMax() {
		return dataNascimentoMax;
	}
	public void setDataNascimentoMax(Date dataNascimentoMax) {
		this.dataNascimentoMax = dataNascimentoMax;
	}
	
}
